@troubleshooting / 2024-07-09

입력 유효성 검사 통합 관리

regex란 무엇인가를 나타내는 그림

SOPT 지원서의 각 입력 필드에 대한 유효성 검사 로직 정리 및 적용

상황

SOPT 지원서를 만들고 있는 중에 각 input들에 대한 에러 조건이 상이하여 이를 하나의 파일에서 관리하면 좋을 거 같다는 생각이 들었다. 따라서 constants 파일에 몰아넣고 한꺼번에 관리해주기로 하였다.

하지만 input들에 대한 조건 등이 아직 구체적으로 정해져있지 않아 그 전에 일단 각 input들에 대한 조건과 pattern 등을 모두 정리해보기로 하였다.

이름

조건

허용 글자

한글만 가능. 그 외의 값 입력 시 에러 메세지.

pattern

/^[가-힣]+$/

max length

10

min length

2

에러 처리

필수

필수 입력 항목이에요.

patter과 불일치

잘못된 이름(한글명) 형식이에요. 이름(한글명)을 정확하게 입력해주세요.

최소값

최소 2자 이상 입력해 주세요.

최댓값

최대 10자 까지 입력할 수 있어요

이메일

조건

허용 글자

영어와 한글, 숫자만. 그 외의 값 입력 시 에러 메세지.

pattern

‘최소 1자’ + @ + ‘뒤에 최소 1자’ + ‘.’ + ‘2-4자’
/^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/

max length

100

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치

이메일 형식이 올바르지 않아요.

최댓값

최대 100자 까지 입력할 수 있어요.

항목 없음

존재하지 않는 이메일이에요.

인증 번호

조건

허용 글자

영어(대문자 → 소문자로 변환), 숫자.

pattern

영어 대소문자, 숫자
/^[a-zA-Z0-9]$/

max length

6

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치, 인증번호 일치하지 않음

인증 번호가 일치하지 않아요.

최댓값

최대 6자 까지 입력할 수 있어요.

비밀번호

조건

허용 글자

영어, 숫자, 특수문자. 그 외 값 입력 시 에러 메세지.

pattern

A-Z a-z 0-9 키보드에 있는 모든 특수기호
/^[a-zA-Z0-9!@#$%^&*()_+[\]{};':="\\|,.<>/?`~-]{4,}$/

max length

100

min length

4

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치

비밀번호는 영문 대소문자/숫자/특수 문자 조합, 4자리 이상으로 구성 해주세요.

최댓값

최대 100자 까지 입력할 수 있어요

비밀번호 확인

조건

허용 글자

위의 비밀번호와 동일한 비밀번호

max length

100

에러 처리

필수

필수 입력 항목이에요.

비밀번호 불일치

비밀번호가 일치하지 않아요.

생년월일

조건

허용 글자

숫자. 4/2/2에 자동으로 - 추가.

pattern

yyyy/mm/dd
/[0-9]{4}\/[0-9]{2}\/[0-9]{2}/

range

1990.01.01 - 현재

maxLength

10 (’-’ 포함.)

에러 처리

필수

필수 입력 항목이에요.

달력에 없는 값 (예. 24월 42일)

잘못된 생년월일 형식이에요. 생년월일을 정확하게 입력해주세요.

range 벗어남

1990년 이후부터 오늘 날짜까지 입력 가능해요.

월과 일이 매치가 안 됨 (예. 2월 31일)

2004년 9월은 30일까지만 유효해요.

2000년 2월은 29일까지만 유효해요. (윤년)

최댓값

최대 10자 까지 입력할 수 있어요.

휴대폰 번호

조건

허용 글자

숫자. 3/4/4에 자동으로 - 추가.

pattern

010-0000-0000
/^010-?\d{3,4}-?\d{4}$/

max length

13 (’-’ 포함.)

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치

잘못된 휴대폰 번호 형식이에요. 휴대폰 번호를 정확하게 입력해주세요.

최댓값

최대 13자 까지 입력할 수 있어요.

포트폴리오

조건

허용 파일

.pdf, .pptx. 그 외의 파일들은 업로드 못하도록.

max size

50MB

에러 처리

size 초과

첨부파일 용량을 초과했어요.

증명 사진

조건

허용 파일

png, jpg, jpeg. 그 외의 파일들은 업로드 못하도록.

에러 처리

필수

필수 입력 항목이에요.

size 초과

파일 크기가 너무 커요. 10MB 이하로 선택해주세요.

url

조건

pattern

/[(http(s)?)://(www.)?a-zA-Z0-9@:%.*+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%*+.~#?&//=]\*)/

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치

url 형식이 올바르지 않아요.

지하철역, 대학, 학과

조건

pattern

마침표, 쉼표, 가운뎃점(·), 괄호(), 하이픈(-), &, 띄어쓰기와 한글만 허용
/^[가-힣\s.,·()\-]&+$/

max length

30

에러 처리

필수

필수 입력 항목이에요.

조건과 불일치

입력 형식이 올바르지 않아요.

최댓값

최대 30자 까지 입력할 수 있어요.

특이 케이스

4.19 민주묘지역 → 마침표 사용
총신대입구(이수)역 → 괄호 사용
시청·용인대역 → 가운뎃점 사용
시청, 용인대역 → 쉼표 사용
시청-용인대역 → - 사용

적용

VALIDATION_CHECK constants 생성

constants에 하나의 객체를 만들어 관리해주었다.

export const VALIDATION_CHECK = {
  name: {
    pattern: /^[가-힣]+$/,
    maxLength: 10,
    minLength: 2,
    errorText:
      '잘못된 이름(한글명) 형식이에요. 이름(한글명)을 정확하게 입력해주세요.',
    errorTextNonexistence: '존재하지 않은 계정이에요.',
  },
  email: {
    pattern: /^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/,
    maxLength: 100,
    errorText: '잘못된 이메일 형식이에요. 이메일을 정확하게 입력해주세요.',
    errorTextExistence: '이미 존재하는 계정이에요.',
    errorTextNonexistence: '존재하지 않은 계정이에요.',
    notMatchErrorText: '잘못된 이메일 혹은 비밀번호예요.',
  },
  // ...
};

실제 적용

onError: (error) => {
  if (error.response?.status === 400 || error.response?.status === 403) {
    setError('name', {
      type: 'non-existence',
      message: VALIDATION_CHECK.name.errorTextNonexistence,
    });
    setError('email', {
      type: 'non-existence',
      message: VALIDATION_CHECK.email.errorTextNonexistence,
    });
  }
},

Copyright ©2024, Designed By Eonseok Jeon